개발 기본 개념

코드를 읽고 쓸 때 자주 나오는 개념 용어

  • 용어 38개

API (Application Programming Interface)

프로그램끼리 기능을 호출하기 위해 공개한 약속된 창구.

  • 함수·클래스 형태일 수도 있고, HTTP로 호출하는 REST API일 수도 있다.
  • 학습 노트: API 개념

interface (인터페이스)

내부 구현은 숨기고, 외부에는 “이렇게 호출하면 이렇게 동작한다”는 규약만 공개한 접점.

  • 호출하는 쪽(caller)이 아니라 “호출 규약”이다. 함수 시그니처, 클래스의 메서드 목록, API 명세, 통신 규격 모두 interface다.
  • 통신망에서는 장비·기능 사이의 연결 지점(예: 3GPP의 NF 간 interface)을 뜻하기도 한다.

library (라이브러리)

필요할 때 내가 호출해서 쓰는 함수·클래스 모음.

framework (프레임워크)

전체 구조와 실행 흐름을 틀로 제공하고, 그 틀 안에 내 코드를 끼워 넣어 쓰는 기반.

SDK (Software Development Kit)

특정 플랫폼·서비스용 프로그램을 만들 수 있게 묶어 놓은 개발 도구 모음.

  • 라이브러리, 도구, 문서, 예제 코드 등이 함께 들어 있다. “server”가 아니라 “software” development kit이다.

caller / callee

함수를 호출하는 쪽(caller) / 호출받는 쪽(callee).

  • 네트워크에서는 요청하는 client와 응답하는 server의 관계와 비슷하다.

전처리 / 후처리

핵심 비즈니스 로직 실행 전/후에 공통으로 하는 작업.

middleware (미들웨어)

요청과 응답 흐름 중간에 끼어 공통 처리를 하는 계층.

callback (콜백)

어떤 일이 끝났거나 이벤트가 발생했을 때 나중에 호출되도록 넘겨 두는 함수(또는 URL).

동기 / 비동기 (sync / async)

동기는 결과가 나올 때까지 이어서 기다리고, 비동기는 요청만 해 두고 다른 일을 하다가 결과를 나중에 받는 방식.

blocking / non-blocking

blocking은 호출이 끝날 때까지 그 자리에서 멈춰 기다리고, non-blocking은 기다리지 않고 바로 돌아온다.

idempotent (멱등성)

같은 요청을 여러 번 보내도 서버 상태가 한 번 보낸 것과 같은 성질.

serialization / deserialization (직렬화 / 역직렬화)

객체를 전송·저장할 수 있는 바이트나 문자열(예: JSON)로 바꾸는 것 / 다시 객체로 되돌리는 것.

parsing (파싱)

문자열이나 데이터를 규칙에 따라 읽어서 의미 있는 구조로 바꾸는 것.

handling (핸들링)

어떤 상황, 오류, 요청을 받아 적절히 처리하는 것.

bug / defect (버그 / 결함)

프로그램이 의도와 다르게 동작하게 만드는 코드의 오류.

  • bug는 코드나 설계의 잘못 자체(결함, defect)를 가리키고, 실제로 겉으로 드러난 오작동은 failure(장애)라고 구분하기도 한다.
  • 코드 리뷰의 nit(사소한 지적)와는 다르다. nit는 결함이 아니라 스타일 수준이다(Git·버전관리 노트 참고).

debug (디버그)

프로그램의 오류(bug)를 찾아 원인을 파악하고 고치는 작업.

debugger / breakpoint (디버거 / 중단점)

debugger는 실행 중인 프로그램을 멈추고 한 줄씩 진행하며 내부 상태를 볼 수 있게 해 주는 도구, breakpoint는 “여기서 멈춰라”고 지정한 지점.

  • step(한 줄씩 실행), continue(다음 중단점까지 실행), backtrace(호출 순서 확인)가 기본 동작이다. C/C++에서는 gdb가 대표적이다(운영체제·시스템 노트 참고).
  • 학습 노트: GDB 실전 디버깅 (멀티스레드·시그널)

log (로그)

프로그램이 실행 중에 남기는 기록.

timeout / retry

timeout은 응답을 기다리는 최대 시간, retry는 실패했을 때 다시 시도하는 것.

patch (소프트웨어)

이미 배포된 프로그램의 버그나 취약점을 고치는 작은 수정.

  • HTTP의 PATCH 메서드(부분 수정)와 이름이 같지만 다른 개념이다. → 네트워크·통신 노트의 HTTP 메서드 참고.
  • diff로 만든 “변경점 파일”을 patch라고 부르기도 한다.
  • 학습 노트: FUNCTION PATCH

refactoring (리팩터링)

겉으로 보이는 동작은 바꾸지 않고 내부 구조를 정리하는 것.

legacy (레거시)

오래되어 유지보수가 어렵지만 아직 운영 중인 시스템이나 코드.

deprecated

앞으로 제거될 예정이라 사용을 권장하지 않는 기능.

  • 대체 기능이 안내되는 경우가 많다.

backward compatibility (하위 호환성)

새 버전이 이전 버전의 사용 방식도 그대로 지원하는 것.

hardcoding (하드코딩)

바뀔 수 있는 값을 코드에 직접 박아 넣는 것.

  • 설정 파일이나 환경 변수로 분리하는 것이 일반적인 대안.

overload (오버로딩) / 과부하

코드에서는 같은 이름의 함수(메서드)를 매개변수의 개수나 타입을 달리해 여러 개 정의하는 것. “덮어쓰기”가 아니라 “같은 이름의 함수가 여러 개 공존”하는 것이다.

  • 예) print(int), print(String), print(int, int). 호출할 때 넘긴 인자에 맞는 것이 선택되며, 컴파일 시점에 결정된다.
  • 반환 타입만 다른 것은 overload가 되지 않는다(매개변수가 달라야 한다). Python처럼 overload를 지원하지 않는 언어에서는 같은 이름으로 다시 정의하면 앞의 것이 덮어써진다.
  • 시스템·통신 맥락의 overload는 전혀 다른 뜻으로, 처리 능력을 넘는 “과부하” 상태다(overload control, throttling).
  • 학습 노트: 연산자 오버로딩 (대입연산자, 전위-후위연산자)

override (오버라이딩)

상속받은 하위 클래스가 부모 클래스의 같은 이름, 같은 매개변수의 메서드를 자기 방식으로 다시 정의하는 것. “덮어쓰기”에 가까운 쪽은 이것이다.

  • 부모 타입 변수로 호출해도 실제 객체가 자식이면 자식의 메서드가 실행된다. 어떤 것을 실행할지는 실행 시점에 결정된다(다형성, polymorphism).
  • Java의 @Override, C++의 virtual / override는 “부모 메서드를 재정의한다”는 표시다. 실수로 이름이나 매개변수를 틀리면 컴파일러가 알려 준다.
  • 설정 값을 “기본값 위에 덮어쓴다”는 뜻으로도 쓴다(예: 환경 변수로 설정 파일 값을 override).
  • 학습 노트: 객체 지향 (다형성) · 객체지향 특징 (4가지 특징, SOLID)

polymorphism (다형성)

같은 이름의 호출(인터페이스)이라도 대상 객체에 따라 다르게 동작하는 성질.

  • override가 대표적인 구현 방법이다. 호출하는 쪽은 구체 타입을 몰라도 된다.
  • 학습 노트: 객체 지향 (다형성)

dead code (데드 코드)

실행되지 않거나, 실행돼도 결과에 영향을 주지 않는 코드.

  • 호출되지 않는 함수, 도달할 수 없는 분기, 주석 처리해 둔 옛 코드 등. 읽는 사람을 헷갈리게 하므로 지우는 것이 좋고, 필요하면 Git 이력에서 되살릴 수 있다.
  • 학습 노트: 전처리기 조건부 컴파일 — if 0으로 코드 끄기와 빌드 옵션 분기

md (Markdown)

간단한 기호로 서식을 표현하는 텍스트 문서 형식(확장자 .md).

  • # 제목, - 목록, **굵게**처럼 쓰고, 렌더러가 서식이 적용된 문서로 보여 준다.
  • GitHub README, 기술 문서, Obsidian·노션 같은 노트 도구에서 널리 쓴다. 일반 텍스트라 Git으로 변경 이력을 관리하기 좋다.

template (템플릿)

변하는 부분을 비워 둔 틀. 값이나 타입을 채워 넣어 여러 번 찍어내는 용도.

  • C++ template: 타입을 매개변수로 받는 함수·클래스를 한 번 작성해 여러 타입에 쓰는 기능(제네릭 프로그래밍). 예) template<typename T> T max(T a, T b), std::vector<int>. 컴파일할 때 타입별 코드가 만들어진다. Java, C#의 generics와 비슷한 개념이다.
  • 일반 의미: 문서, 이슈, PR의 양식(PR 템플릿), HTML의 값만 바꿔 끼우는 템플릿 엔진(Thymeleaf, Jinja) 등.
  • “뼈대”라고 번역하는 경우가 있지만, 핵심은 “변하는 자리가 표시된 틀”이라는 점이다. skeleton과 구분해서 쓴다.
  • 학습 노트: Template (함수 템플릿) · Template (클래스 템플릿) · 동적 템플릿 엔진 설계 패턴 (계층화·SpEL·Chain of

skeleton (스켈레톤)

구조만 만들어 두고 내용(구현)은 비워 둔 최소한의 뼈대 코드.

  • template과의 차이: skeleton은 이미 구체적인 하나의 뼈대(복사해서 살을 붙여 가는 시작점)이고, template은 변하는 자리를 비워 두고 여러 번 찍어내는 틀이다.
  • 프로젝트 skeleton: 초기 폴더 구조, 빌드 설정, 빈 클래스와 함수만 만들어 둔 시작 코드. 구조를 먼저 합의할 때 쓴다.
  • RPC·원격 호출 용어로는 client 쪽 대리 코드를 stub, server 쪽에서 요청을 받아 실제 구현을 호출해 주는 코드를 skeleton이라 부른다.
  • 학습 노트: c코드 골격 목록

boilerplate (보일러플레이트)

거의 모든 프로젝트에서 똑같이 반복해 써야 하는 정형 코드.

  • 프레임워크나 생성 도구(scaffolding)가 줄여 주는 대상이다.

queue (큐)

먼저 넣은 데이터를 먼저 꺼내는 선입선출(FIFO, First In First Out) 자료구조.

stack (스택)

마지막에 넣은 데이터를 먼저 꺼내는 후입선출(LIFO, Last In First Out) 자료구조.

  • 접시를 쌓고 위에서부터 꺼내는 것과 같다. 넣는 동작은 push, 꺼내는 동작은 pop.
  • 예) 함수 호출 순서를 기록하는 call stack, 되돌리기(undo).
  • 같은 이름의 “스택 메모리(함수 호출 때 쓰는 메모리 영역)“도 이 구조로 동작한다.
  • 관련 노트: 스택

priority queue (우선순위 큐)

넣은 순서가 아니라 우선순위가 높은 데이터부터 꺼내는 큐.

hash table (해시 테이블)

키(key)를 해시 함수로 저장 위치로 바꿔서, 키로 값을 평균적으로 바로 찾는 자료구조.

  • 서로 다른 키가 같은 위치로 가는 충돌(collision)은 연결 리스트 등으로 처리한다. 예) 파이썬 dict, 자바 HashMap.